#ifndef LCOM_ANIM_H
#define LCOM_ANIM_H

#include "xpm.h"

/** Identificadores de animações */
enum AnimID {
	ANIM_ALEX_L,	/**< Alex parado olhando para a esquerda */
	ANIM_ALEX_R,	/**< Alex parado olhando para a direita */
	ANIM_ALEX_WL, 	/**< Alex andando para a esquerda */
	ANIM_ALEX_WR,	/**< Alex andando para a direita */
	ANIM_ALEX_JL,	/**< Alex saltando para a esquerda */
	ANIM_ALEX_JR,	/**< Alex saltando para a direita */
	ANIM_EAGLE_L,	/**< Águia voando para a esquerda */
	ANIM_EAGLE_R,	/**< Águia voando para a direita */
	
	ANIM_HELI_L,	/**< Helicóptero voando para a esquerda */
	ANIM_HELI_R,	/**< Helicóptero voando para a direita */

	ANIM_BOSS_1,	/**< Boss #1 */
	ANIM_BOSS_2,	/**< Boss #2 */
	ANIM_BOSS_3,	/**< Boss #3 */

	ANIM_GAME,	/**< Jogo do galo */	

	ANIM_COUNT  	/**< Número de animações */
};

/** Descritor de animações */
typedef struct {
	enum AnimID id;	/**< Identificador da animação */
	int msf; 	/**< Velocidade em milisegundos / frame */
	int msec; 	/**< Contador de milisegundos */
	int fnum;	/**< Número do frame */
} Animation;

/** Inicializa uma animação
 *
 * \param anim Endereço da animação
 * \param id Identificador da animação
 * \param msf Velocidade da animação
 */
void anim_init (Animation *anim, enum AnimID id, int msf);

/** Começa a exibir uma animação
 *
 * \param anim Endereço da animação
 * \return Primeiro quadro da animação
 */
XPM anim_play (Animation *anim);

/** Obtém o quadro atual da animação
 * \param anim Endereço da animação
 * \return Quadro da animação que deve ser exibido
 */
XPM anim_continue (Animation *anim);

#endif //LCOM_ANIM_H


